
(() => {
  //类的类型---- 强制某个类实现一个契机
  // 定义一个接口
  interface Ifly {
    // 该方法没有任何的实现
    fly(): void
  }

  // 定义一个类这个类的类型就是上面定义的接口(实际上是对类的约束)
  class Person implements Ifly {
    fly() {
      console.log('我会飞')
    }
  }

  const me = new Person()
  me.fly()

  interface ISwim {
    swim(): void
  }

  // 定义一个类，这个类的类型是Ifly于ISwim（可以定义多个接口）

  class Person2 implements Ifly, ISwim {
    fly() {
      console.log('你会飞')
    }
    swim() {
      console.log('你会游泳')
    }
  }

  const you = new Person2()
  you.fly()
  you.swim()

  // 类可以通过接口的形式来定义当前这个类的类型
  // 类可以实现一个接口，类也可以实现多个接口，接口中国呢的内容都要真正的实现


  // 一个接口可以继承其他的多个接口
  interface IflyISwim extends Ifly, ISwim { }

  // 定义一个类直接实现IflyISwim这个接口

  class Person3 implements IflyISwim {
    fly(): void {
      console.log('我会飞')
    }
    swim(): void {
      console.log('我会飞')
    }
  }
  const person3 = new Person3()


  // 接口与接口之间叫继承（extends) ，类和接口之间叫实现（使用的是implements）

})()


